package com.cr.business.service.impl;

import com.alibaba.fastjson2.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.cr.business.service.SmsService;
import com.cr.common.config.AliyunSmsConfig;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

@Service
public class SmsServiceImpl implements SmsService {

    @Resource
    private AliyunSmsConfig smsConfig;

    @Resource
    private IAcsClient smsClient;

    @Override
    public boolean sendSms(String phone, String code, int time) throws ClientException {
        // 创建一个 CommonRequest 对象，用于发送请求给阿里云短信服务
        CommonRequest request = new CommonRequest();
        // 设置请求方法为 POST
        request.setMethod(MethodType.POST);
        // 设置请求的域名，即阿里云短信服务的 API 地址
        request.setDomain("dysmsapi.aliyuncs.com");
        // 设置请求的版本，以确保使用正确的 API 版本
        request.setVersion("2017-05-25");
        // 设置请求的动作，这里是发送短信的动作
        request.setAction("SendSms");
        // 设置请求的 RegionId，一般为 cn-hangzhou
        request.putQueryParameter("RegionId", smsConfig.getRegionId());
        // 设置短信签名，该值是从配置文件中注入的
        request.putQueryParameter("SignName", smsConfig.getSignName());
        // 设置短信模板代码，该值是从配置文件中注入的
        request.putQueryParameter("TemplateCode", smsConfig.getTemplateCode());
        // 设置要发送短信的手机号码
        request.putQueryParameter("PhoneNumbers", phone);
        // 创建一个 Map 用于存储短信模板的参数，这里存储验证码
        Map<String, Object> param = new HashMap<>();
        param.put("code", code);
        param.put("time", time);
        // 将短信模板的参数转换为 JSON 字符串并添加到请求中
        request.putQueryParameter("TemplateParam", JSONObject.toJSONString(param));
        // 使用 smsClient 发送请求，并得到响应
        CommonResponse response = smsClient.getCommonResponse(request);
        // 判断响应是否成功并返回结果
        return response.getHttpResponse().isSuccess();
    }
}
